﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Interfaces;
using System.Collections;

namespace Model
{
    public class PosteringsColl
    {
        // Attribut
        private List<Postering> posteringer;    // aggregering af nul til mange posterings-objekter

        // Konstruktør
        public PosteringsColl()
        {
            posteringer = new List<Postering>();    // pga. aggregering skal listen med posterings-objekter skabes
        }

        #region Operationer på posterings-objekter

        #region Metoder til at oprette, redigere, finde og returnere iterator

        // Metode til at oprette et posterings-objekt i systemet
        public void OpretPostering(long bilagsNr, string posteringsType, string beskrivelse, double beløb, DateTime dato, bool aktiv)
        {
            Postering postering = new Postering(bilagsNr, posteringsType, beskrivelse, beløb, dato, aktiv);
            posteringer.Add(postering);
        }

        // Metode til at finde et posterings-objekt
        public Postering FindPostering(long bilagsNr)
        {
            foreach (Postering post in posteringer)
            {
                if (bilagsNr == post.BilagsNr)
                {
                    return post;
                }
            }
            return null;
        }

        // Metode der annullerer et posterings-objekt
        public void AnnullerPostering(long bilagsNr, bool aktiv)
        {
            Postering postering = FindPostering(bilagsNr);
            postering.Aktiv = aktiv;
        }

        // Metode til at hente en iterator, der gennemløber posterings-objekter
        public IEnumerator GetPosteringer()
        {
            return posteringer.GetEnumerator();
        }

        #endregion

        #region Associerings metoder

        // kald af metode til at skabe associeringen mellem et posterings-objekt og et årsregnskabs-objekt
        public void TilknytÅrsregnskab(long bilagsNr, Årsregnskab etÅrsregnskab)
        {
            Postering post = FindPostering(bilagsNr);
            post.TilknytÅrsregnskab(etÅrsregnskab);
        }

        // kald af metode til at fjerne associeringen mellem et post-objekt og et årsregnskabs-objekt
        public void FjernÅrsregnskabsTilknytning(long bilagsNr)
        {
            Postering post = FindPostering(bilagsNr);
            post.FjernÅrsregnskabsTilknytning();
        }

        // kald af metode til at hente et associeret årsregnskabs-objekt
        public Årsregnskab GetÅrsregnskab(long bilagsNr)
        {
            Postering post = FindPostering(bilagsNr);
            return post.GetÅrsregnskab();
        }

        #endregion

        # endregion
    }
}
